home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / source_ / devlk.s < prev    next >
Text File  |  1997-05-01  |  2KB  |  75 lines

  1. *--------------------------------------------------------------------
  2. * デバイスドライバー用関数
  3. *--------------------------------------------------------------------
  4.  
  5.     .include    iocscall.mac
  6.  
  7.     .text
  8.     .even
  9.     .xref    GetNulPoint
  10.  
  11. *--------------------------------------------------------------------
  12.  
  13.     .xdef    SetDevLink
  14. SetDevLink:
  15. * デバイスドライバーのリンクに入り込む
  16. * a0.l <- 組み込むデバイスヘッダー
  17.     movem.l    d0/a0-a2,-(sp)
  18.     lea    SetDevLinkMain(pc),a2
  19.     bra.b    @f
  20. *
  21.     .xdef    ResetDevLink
  22. ResetDevLink:
  23. * デバイスドライバーのリンクを解除する
  24. * a0.l <- 解除するデバイスヘッダー
  25.     movem.l    d0/a0-a2,-(sp)
  26.     lea    ResetDevLinkMain(pc),a2
  27. @@:
  28.     clr.l    a1
  29.     IOCS    _B_SUPER    * super visor mode
  30.     move.l    d0,-(sp)
  31.     *
  32.     bsr    GetNulPoint    * -> a1(NUL)
  33.     jsr    (a2)        * メイン
  34.     *
  35.     move.l    (sp)+,d0
  36.     bmi    @f        * 元からsuper visorであった
  37.     move.l    d0,a1
  38.     IOCS    _B_SUPER    * user mode
  39. @@:    movem.l    (sp)+,d0/a0-a2
  40.     rts
  41.  
  42. *--------------------------------------------------------------------
  43. * NULデバイスがデバイスリンクの一番先頭であり、必ず次のデバイスが
  44. * リンクしていると仮定しているルーチンである。
  45. *--------------------------------------------------------------------
  46.  
  47. SetDevLinkMain:
  48. * a0 <- 組み込むデバイスヘッダー
  49. * a1 <- NUL
  50.     * 最後を調べる
  51. @@:    move.l    (a1),a1        * 次へ(NULの次は必ずあるので最初はいきなり飛ばす)
  52.     cmp.l    #-1,(a1)    * 最後?
  53.     bne    @b        * No
  54.     move.l    a0,(a1)        * リンク
  55.     rts
  56.  
  57. *--------------------------------------------------------------------
  58.  
  59. ResetDevLinkMain:
  60. * a0 <- 解除するデバイスヘッダー
  61. * a1 <- NUL
  62. @@:    move.l    (a1),a1        * 次へ
  63.     cmp.l    #-1,(a1)    * 最後?
  64.     beq    @f        * Yes : なかった(本当はおかしいが手抜きでエラーなし)
  65.     cmp.l    (a1),a0        * 次は指定デバイス?
  66.     bne    @b        * Yes
  67.     * リンクを外す
  68.     * 解除するデバイスヘッダーのnextを前のデバイスのnextに書き込む
  69.     move.l    (a0),(a1)
  70. @@:
  71.     rts
  72.  
  73. *--------------------------------------------------------------------
  74.     .end
  75.